package igrupobbva.pe.sistemareniec.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.log4j.Logger;


/**
 * 
 * @author Orlando Pihue Montoya
 * 13/02/2008
 */
public class TramaPrueba {
	private static Logger logger = Logger.getLogger(TramaPrueba.class);
	
//	 VARIABLES MQ
	private java.lang.String MQIP = "";

	private java.lang.String MQSYS = "";

	private java.lang.String MQQUEUEMANAGER = "";

	private java.lang.String MQLOCALQUEUE = "";

	private java.lang.String MQREMOTEQUEUE = "";
	String ipAddress;
	private java.lang.String estructuraTramaSendReniec = "";

	int port;

	private java.lang.String MQPORT = "";
	private int nroCampos = 0;
	private int[] campos = null;
	private int[] camposSuma = null;
	private java.lang.String[] nombresCampos = null;
	private java.lang.String[] camposTrama = null;
	private int lengthTramaSendReniec = 0;
	static String propsFilePath = "./unique.cfg";
	Properties properties;
	
	public TramaPrueba() throws IOException {
		super();
		properties = new Properties();
		//loadProperties(propsFilePath);		
	
	}
	private void formatearTramaSendReniec(String estructuraTramaDeliver) {
		try {			

			logger.info("Estructura de trama deliver declarada en unique.cfg");
			String tempToken = "";
			StringTokenizer st = new StringTokenizer(estructuraTramaDeliver, "<");
			nroCampos = st.countTokens();
			logger.info("NUMERO DE CAMPOS ES :: "+nroCampos);
			campos = new int[nroCampos];	
			camposSuma = new int[nroCampos];
			camposTrama = new String[nroCampos];
			
			nombresCampos = new String[nroCampos];
			int contador=0;
			for (int i = 0; i < nroCampos; i++) {
				tempToken = st.nextToken();

				campos[i] = Integer.valueOf(tempToken.substring(tempToken.indexOf(",") + 1, tempToken.indexOf(">")).trim()).intValue();
				nombresCampos[i] = tempToken.substring(tempToken.indexOf("<") + 1, tempToken.indexOf(",")).trim();
				contador=contador+campos[i];
				camposSuma[i]=contador;
				this.lengthTramaSendReniec = this.lengthTramaSendReniec + campos[i];
				logger.info(nombresCampos[i] + " largo: " + camposSuma[i]);
				
			}			
			
			String m="000479  0                                                                                                                                                                                                                               00000520200           020020102020080207081248IB00000479TBGA    C111017  000111111111111                                                   017915623                       7915623   0100100000000000377150001000000000000000   0000                                EFECTIVO00000009031432                            000100000000000377150001                                            9210557        20071005000000200710222359590000000000037715000000000000037715009210557   000017                                                                                    ";
			m=tramaPruebaSend();			
			logger.info("################ :: "+m.length());
			for (int i = 0; i < nroCampos; i++) {
				
				if(i==0)
				{					
					camposTrama[i]=m.substring(0, campos[i]);
					logger.info("campos :: ["+camposTrama[i]+"]:: 0,8");
				}
				else
				{
					camposTrama[i]=m.substring(camposSuma[i-1], camposSuma[i]);
					logger.info("campos :: ["+camposTrama[i]+"]:: "+(camposSuma[i-1])+","+(camposSuma[i]));
					
				}
				
			}
			logger.info("str_Mensaje :: "+camposTrama.length);
			logger.info("EL LARGO DE LA ESTRUCTURA ES :: "+this.lengthTramaSendReniec);

		} catch (Exception e) {
			logger.error("ERROR EN FORMATEAR TRAMA DELIVER ",e);
		}
	}
	public void loadProperties(String fileName) throws IOException {

		logger.info("reading configuration file " + fileName + "...");
		FileInputStream propsFile = new FileInputStream(fileName);
		properties.load(propsFile);
		propsFile.close();
		logger.info("Setting default parameters...");
		ipAddress = properties.getProperty("ip-address");		
		// lee parametros MQ		
		MQIP = properties.getProperty("MQSERVER-IP", MQIP);
		MQSYS = properties.getProperty("MQSYSTEM-DEF", MQSYS);
		MQQUEUEMANAGER = properties.getProperty("MQQUEUE-MANAGER", MQQUEUEMANAGER);		

		logger.info("VALORES MQ " + MQIP + " " + MQSYS + " " + MQQUEUEMANAGER + " " + MQLOCALQUEUE + " " + MQREMOTEQUEUE + " " + MQPORT);
		
		estructuraTramaSendReniec = properties.getProperty("ESTRUCTURA-TRAMA-SEND-UNIQUE", estructuraTramaSendReniec);
		formatearTramaSendReniec(estructuraTramaSendReniec);	

		//hacerMatchArreglos(camposProto, nombresCampos);

		//logger.info("EL ID DE MENSAJE ES: " + ID);
	
		

		// fin parametros MQ

	
		
		
	}
	public static  String tramaPruebaReceive(){
		StringBuffer buffer=new StringBuffer();
		
		/** CabeceraGeneral **/		
		buffer.append("000479  ");//numeroOperacion 8;
		buffer.append("3010");//codigoRetorno 4;
		buffer.append(FuncionesUtil.completarSpace("DESCRIPCION", 200));//descripcionCodigoRetorno 200;
		buffer.append("LT123");//longitudTrama 4;
		buffer.append(FuncionesUtil.completarSpace("FILLER GRAL", 144));//fillerGral 144; 				
		
		/** Cabecera Requerimiento**/		
		buffer.append("CB888888888");//codigoBanco 11;
		buffer.append("CEMPRESA5555555");//codigoEmpresaRecaudadora 15;
		buffer.append("CO2345");//codigoOperacion 6;
		buffer.append("20081230155922");//fechaHoraTransaccion 14;
		buffer.append("NOB99999");//numeroOperacionBanco 8 ;
		buffer.append("NOE888888888");//numeroOperacionEmpresa 12;
		buffer.append("CT777777");//codigoTerminal 8;
		buffer.append("CSA444  ");//codigoSucursalAgencia 8;		
		buffer.append("TD");	//tipoIdDepositante 2;		
		buffer.append(FuncionesUtil.completarSpace("NRO DEPOS", 30));//numeroIdDepositante 30;		
		buffer.append("CDO1234567");//codigoConsultora 10;		
		buffer.append(FuncionesUtil.completarSpace("NOM CONSULTORA", 40));//nombreConsultora 40;		
		buffer.append("MONE");//monedaPagoCuentaRecaudadora 4;		
		buffer.append("ND ");//numeroDocumentosRta 3;		
		buffer.append("NS");//numeroServicios 2;		
		buffer.append(FuncionesUtil.completarSpace("FILLER REQ", 28));//fillerRta 28;		
						
		/** Servicio **/	
		buffer.append("CDGO");//codigo 7;		
		buffer.append(FuncionesUtil.completarSpace("DESCRIPCION", 20));//descripcion 20;		
		buffer.append(FuncionesUtil.completarSpace("IMPORTE  $ 200", 18));//importeTotal 18;		
		buffer.append(FuncionesUtil.completarSpace("MENSAJE DEPOSITANTE", 40));//mensajeDepositante 40 ;		
		buffer.append("NUM");//numeroDocumentosSv 3;		
		buffer.append(FuncionesUtil.completarSpace("FILLER SERVICIO", 50));//fillerServicio 50;		
						
		/** Documento 01 **/	
		buffer.append("DOCUMENTO PAG00");//numeroDocumentoPago 15;		
		buffer.append("FECH EMISION00");//fechaEmision 14;		
		buffer.append("FECH VENCIMI00");//fechaVencimiento 14 ;		
		buffer.append("IMPORTE PAGO    00");//importePago 18;		
		buffer.append("IMPORTE CAPITAL 00");//importeCapital 18;		
		buffer.append("IMPORTE GASTOS  00");//importeGastos 18;		
		buffer.append("IMPORTE MINIMO  00");//importeMinimo 18;		
		buffer.append(FuncionesUtil.completarSpace("REFERENCIA DOCUMENTO 00", 50));//referenciaDocumento 50;		
		buffer.append("SALDO TOTAL PAGAR ");//saldoTotalPagar 18;		
		buffer.append(" 1");//fillerDcto 2;		
		/** Documento 02 **/	
		buffer.append("DOCUMENTO PAG02");//numeroDocumentoPago 15;		
		buffer.append("FECH EMISION02");//fechaEmision 14;		
		buffer.append("FECH VENCIMI02");//fechaVencimiento 14 ;		
		buffer.append("IMPORTE PAGO  02  ");//importePago 18;		
		buffer.append("IMPORTE CAPITAL 02");//importeCapital 18;		
		buffer.append("IMPORTE GASTOS  02");//importeGastos 18;		
		buffer.append("IMPORTE MINIMO  02");//importeMinimo 18;		
		buffer.append(FuncionesUtil.completarSpace("REFERENCIA DOCUMENTO", 50));//referenciaDocumento 50;		
		buffer.append("SALDO TOTAL PAGAR ");//saldoTotalPagar 18;		
		buffer.append(" 0");//fillerDcto 2;	
		/** Documento 03 **/	
		buffer.append("DOCUMENTO PAG03");//numeroDocumentoPago 15;		
		buffer.append("FECH EMISION03");//fechaEmision 14;		
		buffer.append("FECH VENCIMI03");//fechaVencimiento 14 ;		
		buffer.append("IMPORTE PAGO    03");//importePago 18;		
		buffer.append("IMPORTE CAPITAL 03");//importeCapital 18;		
		buffer.append("IMPORTE GASTOS  03");//importeGastos 18;		
		buffer.append("IMPORTE MINIMO  03");//importeMinimo 18;		
		buffer.append(FuncionesUtil.completarSpace("REFERENCIA DOCUMENTO", 50));//referenciaDocumento 50;		
		buffer.append("SALDO TOTAL PAGA03");//saldoTotalPagar 18;		
		buffer.append(" 0");//fillerDcto 2;	
		/** Documento 04 **/	
		buffer.append("DOCUMENTO PAG04");//numeroDocumentoPago 15;		
		buffer.append("FECH EMISION04");//fechaEmision 14;		
		buffer.append("FECH VENCIMI04");//fechaVencimiento 14 ;		
		buffer.append("IMPORTE PAGO    04");//importePago 18;		
		buffer.append("IMPORTE CAPITAL 04");//importeCapital 18;		
		buffer.append("IMPORTE GASTOS  04");//importeGastos 18;		
		buffer.append("IMPORTE MINIMO  04");//importeMinimo 18;		
		buffer.append(FuncionesUtil.completarSpace("REFERENCIA DOCUMENTO", 50));//referenciaDocumento 50;		
		buffer.append("SALDO TOTAL PAGA04");//saldoTotalPagar 18;		
		buffer.append(" 1");//fillerDcto 2;	
		
		
		String m = buffer.toString();
		
		return m;
	}
	public static String tramaPruebaSend(){
		StringBuffer buffer=new StringBuffer();
		//String trama="000479  0                                                                                                                                                                                                                               00000520200           020020102020080207081248IB00000479TBGA    C111017  000111111111111                                                   017915623                       7915623   0100100000000000377150001000000000000000   0000                                EFECTIVO00000009031432                            000100000000000377150001                                            9210557        20071005000000200710222359590000000000037715000000000000037715009210557   000017                                                                                    ";
		
		/** CabeceraGeneral **/		
		buffer.append("000478  ");//numeroOperacion;8
		buffer.append("0");//flagExtorno;1
		buffer.append("                                                                                                                                                                                                                               ");//fillerGral;223
		
		/** Cabecera Requerimiento**/
		buffer.append("00000520200");//codigoBanco;11
		buffer.append("           0200");//codigoEmpresaRecaudadora;15
		buffer.append("101020");//codigoOperacion;6
		buffer.append("20080207081248");//fechaHoraTransaccion;14
		buffer.append("IB");//canal;2
		buffer.append("00000478");//numeroOperacionBanco;8
		buffer.append("TBGA    ");//codigoTerminal;8
		buffer.append("C");//codigoOperador;1
		buffer.append("111017  ");//codigoSucursalAgencia;8
		buffer.append("0001");//monedaPago;4
		buffer.append("11111111111         ");//numeroCuentaRecaudadora;20
		buffer.append("                      ");//datosOriginales;22
		buffer.append("                    ");//fillerReqto;20
		
		/** CabeceraPago **/
		
		buffer.append("01");//tipoIdDepositante;2
		buffer.append("5137176                       ");/**numeroIdDepositante;30**/
		buffer.append("          ");//codigoConsultora;10
		buffer.append("01");//numeroServicios;2
		buffer.append("000");//numeroDocumentosCp;3
		buffer.append("000000000000000000");//importeTotalCp;18
		buffer.append("00");//medioPago;2
		buffer.append("                  ");//numeroCheque;18
		buffer.append("   ");//bancoGirador;3
		buffer.append(" ");//plazaCheque;1
		buffer.append("                  ");//numeroTarjeta;18
		buffer.append("   ");//tipoCuentaCargo;3
		buffer.append("           ");//cuentaCargo;11
		buffer.append("                      ");//referenciaCp;22
		buffer.append("                            ");//fillerPago;28

		/** Servicio **/
		buffer.append("0000");//codigo;4
		buffer.append("000000000000000000");//importeTotalSv;18
		buffer.append("  ");//numeroDocumentosSv;2
		buffer.append("                                            ");//fillerServicio;44

		/** Documento **/
		buffer.append("               ");//numeroDocumentoPago;15
		buffer.append("              ");//fechaEmision;14
		buffer.append("              ");//fechaVencimiento;14
		buffer.append("                  ");//importeOriginal;18
		buffer.append("                  ");//importePagado;18
		buffer.append("                                                  ");//referenciaDcto;50
		buffer.append("                                                  ");//fillerDcto;50
		
		String m = buffer.toString();		
		return m;
	}
	/**PAGO**/
	public static String tramaPruebaSend2(){
		StringBuffer buffer=new StringBuffer();
		//String trama="000479  0                                                                                                                                                                                                                               00000520200           020020102020080207081248IB00000479TBGA    C111017  000111111111111                                                   017915623                       7915623   0100100000000000377150001000000000000000   0000                                EFECTIVO00000009031432                            000100000000000377150001                                            9210557        20071005000000200710222359590000000000037715000000000000037715009210557   000017                                                                                    ";
		
		/** CabeceraGeneral **/		
		buffer.append("000479  ");//numeroOperacion;8
		buffer.append("0");//flagExtorno;1
		buffer.append("                                                                                                                                                                                                                               ");//fillerGral;223
		
		/** Cabecera Requerimiento**/
		buffer.append("00000520200");//codigoBanco;11
		buffer.append("           0200");//codigoEmpresaRecaudadora;15
		buffer.append("201020");//codigoOperacion;6
		buffer.append("20080207081248");//fechaHoraTransaccion;14
		buffer.append("IB");//canal;2
		buffer.append("00000479");//numeroOperacionBanco;8
		buffer.append("TBGA    ");//codigoTerminal;8
		buffer.append("C");//codigoOperador;1
		buffer.append("111017  ");//codigoSucursalAgencia;8
		buffer.append("0001");//monedaPago;4
		buffer.append("11111111111         ");//numeroCuentaRecaudadora;20
		buffer.append("                      ");//datosOriginales;22
		buffer.append("                    ");//fillerReqto;20
		
		/** CabeceraPago **/
		
		buffer.append("01");//tipoIdDepositante;2
		buffer.append("9000049                       ");/***numeroIdDepositante;30**/
		buffer.append("9818266   ");/***codigoConsultora;10**/
		buffer.append("01");//numeroServicios;2
		buffer.append("001");//numeroDocumentosCp;3
		buffer.append("000000000003771500");//importeTotalCp;18
		buffer.append("01");//medioPago;2
		buffer.append("000000000000000   ");//numeroCheque;18
		buffer.append("000");//bancoGirador;3
		buffer.append("0");//plazaCheque;1
		buffer.append("                  ");//numeroTarjeta;18
		buffer.append("   ");//tipoCuentaCargo;3
		buffer.append("           ");//cuentaCargo;11
		buffer.append("EFECTIVO00000009031432");//referenciaCp;22
		buffer.append("                            ");//fillerPago;28

		/** Servicio **/
		buffer.append("0001");//codigo;4
		buffer.append("000000000003771500");//importeTotalSv;18
		buffer.append("01");//numeroDocumentosSv;2
		buffer.append("                                            ");//fillerServicio;44

		/** Documento **/
		buffer.append("9210557        ");//numeroDocumentoPago;15
		buffer.append("20071005000000");//fechaEmision;14
		buffer.append("20071022235959");//fechaVencimiento;14
		buffer.append("000000000003771500");//importeOriginal;18
		buffer.append("000000000003771500");//importePagado;18
		buffer.append("9210557   000017                                  ");//referenciaDcto;50
		buffer.append("                                                  ");//fillerDcto;50
		
		String m = buffer.toString();		
		return m;
	}
	/**EXTORNO**/
	public static String tramaPruebaSend3(){
		StringBuffer buffer=new StringBuffer();
		//String trama="000479  0                                                                                                                                                                                                                               00000520200           020020102020080207081248IB00000479TBGA    C111017  000111111111111                                                   017915623                       7915623   0100100000000000377150001000000000000000   0000                                EFECTIVO00000009031432                            000100000000000377150001                                            9210557        20071005000000200710222359590000000000037715000000000000037715009210557   000017                                                                                    ";
		
		/** CabeceraGeneral **/		
		buffer.append("000480  ");//numeroOperacion;8 (1,8)
		buffer.append("1");//flagExtorno;1 ()
		buffer.append("                                                                                                                                                                                                                               ");//fillerGral;223
		
		/** Cabecera Requerimiento**/
		buffer.append("00000520200");//codigoBanco;11 ()
		buffer.append("           0200");//codigoEmpresaRecaudadora;15 ()
		buffer.append("301020");//codigoOperacion;6 ()
		buffer.append("20080207081248");//fechaHoraTransaccion;14 ()
		buffer.append("FI");//canal;2 ()
		buffer.append("00000480");//numeroOperacionBanco;8 ()
		buffer.append("029G    ");//codigoTerminal;8 ()
		buffer.append("M");//codigoOperador;1 ()
		buffer.append("000029  ");//codigoSucursalAgencia;8 ()
		buffer.append("0001");//monedaPago;4 ()
		buffer.append("11111111111         ");//numeroCuentaRecaudadora;20 ()
		buffer.append("000479  20080207081248");//datosOriginales;22 ()
		buffer.append("                    ");//fillerReqto;20 ()
		
		/** CabeceraPago **/
		
		buffer.append("01");//tipoIdDepositante;2 ()
		buffer.append("9000049                       ");/***numeroIdDepositante;30**/
		buffer.append("9818266   ");/***codigoConsultora;10**/
		buffer.append("01");//numeroServicios;2 ()
		buffer.append("001");//numeroDocumentosCp;3 ()
		buffer.append("000000000003771500");//importeTotalCp;18 ()
		buffer.append("01");//medioPago;2 ()
		buffer.append("                  ");//numeroCheque;18 ()
		buffer.append("000");//bancoGirador;3 ()
		buffer.append("0");//plazaCheque;1 ()
		buffer.append("                  ");//numeroTarjeta;18
		buffer.append("   ");//tipoCuentaCargo;3 ()
		buffer.append("           ");//cuentaCargo;11 ()
		buffer.append("EFECTIVO00000009101935");//referenciaCp;22 ()
		buffer.append("                            ");//fillerPago;28 ()

		/** Servicio **/
		buffer.append("0001");//codigo;4 ()
		buffer.append("000000000003771500");//importeTotalSv;18 ()
		buffer.append("01");//numeroDocumentosSv;2 ()
		buffer.append("                                            ");//fillerServicio;44

		/** Documento **/
		buffer.append("9210557        ");//numeroDocumentoPago;15 ()
		buffer.append("20071005000000");//fechaEmision;14 ()
		buffer.append("20071022235959");//fechaVencimiento;14 ()
		buffer.append("000000000003771500");//importeOriginal;18 ()
		buffer.append("000000000003771500");//importePagado;18 ()
		buffer.append("9210557   002534                                  ");//referenciaDcto;50
		buffer.append("                                                  ");//fillerDcto;50
		
		String m = buffer.toString();		
		return m;
	}
	
	
}
